#include "max5400.h"
#include "delay.h"
#include "usart.h"
/*
  CLK - G2
  DIN - D12
  CS  - D13
*/

void max5400_Init()
{
  GPIO_InitTypeDef GPIO_InitStruct;

  RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOD|RCC_AHB1Periph_GPIOG, ENABLE);

  GPIO_InitStruct.GPIO_Pin = GPIO_Pin_12 | GPIO_Pin_13;
  GPIO_InitStruct.GPIO_Mode = GPIO_Mode_OUT;
  GPIO_InitStruct.GPIO_PuPd = GPIO_PuPd_UP;
  GPIO_InitStruct.GPIO_OType = GPIO_OType_PP;
  GPIO_InitStruct.GPIO_Speed = GPIO_Speed_100MHz;
  GPIO_Init(GPIOD, &GPIO_InitStruct);
	
	GPIO_InitStruct.GPIO_Pin = GPIO_Pin_2;
  GPIO_InitStruct.GPIO_Mode = GPIO_Mode_OUT;
  GPIO_InitStruct.GPIO_PuPd = GPIO_PuPd_UP;
  GPIO_InitStruct.GPIO_OType = GPIO_OType_PP;
  GPIO_InitStruct.GPIO_Speed = GPIO_Speed_100MHz;
  GPIO_Init(GPIOG, &GPIO_InitStruct);

  MAX5400_CS(1);
  MAX5400_CLK(0);
}

void max5400_setR(float R)
{
  volatile uint8_t temp_r,i;
  temp_r = R / 196.1;
  MAX5400_CS(1);
  MAX5400_CLK(0);
  MAX5400_CS(0);
  for (i = 0; i < 8; i++)
  {
    MAX5400_CLK(0);
		delay_us(1);
    if ((temp_r & 0x80) == 1)
    {
      MAX5400_DIN(1);
    }
    else
    {
      MAX5400_DIN(0);
    }
    MAX5400_CLK(1);
		delay_us(1);
    temp_r <<= 1;
  }
  MAX5400_CS(1);
  MAX5400_CLK(0);
}
